package fabrica2.persistencia;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import fabrica2.excecoes.DAOException;
import fabrica2.modelo.Percurso;

public class PercursoDAO extends GenericDAOImpl<Percurso> implements
		Dao<Percurso> {

	@Override
	public List<Percurso> listar() throws DAOException {
		ResultSet rs = getResultSet("SELECT * FROM Percurso");
		List<Percurso> percursos = new ArrayList<Percurso>();
		Percurso percurso;
		try {
			while(rs.next()){
				percurso = new Percurso();
				percurso.setIdPercurso(rs.getInt("id_percurso"));
				percurso.setIdAcao(rs.getInt("id_acao"));
				percurso.setDescricao(rs.getString("descricao"));
				percursos.add(percurso);
			}
		} catch (SQLException e) {
			throw new DAOException();
		}finally{
			desconectar();
		}
		return percursos;
	}

	@Override
	public Percurso persistir(Percurso percurso) throws DAOException {
		ResultSet rs = getResultSet("SELECT * FROM Percurso where id_percurso = "
				+ percurso.getIdPercurso());
		try {
			// Se existir atualiza
			if (rs.next()) {
				execute("UPDATE Percurso SET id_acao = " +
						percurso.getIdAcao() + ", descricao = '" + percurso.getDescricao()+"'"
						+ " WHERE id_percurso = " + percurso.getIdPercurso()
						);
			}
			// Ou cria um novo
			else {
				execute("INSERT INTO Percurso (id_acao, descricao) VALUES ("
						+ ""  + percurso.getIdAcao() + ", "
						+ "'" + percurso.getDescricao() + "') " 
						);
				//Atualiza o ID caso novo objeto
				String update = "SELECT * FROM Percurso where id_acao = "+percurso.getIdAcao() + " AND descricao = '"+percurso.getDescricao()+"'";
				rs = getResultSet(update);
				if (rs.next()) {
						percurso.setIdPercurso(rs.getInt("id_percurso"));
				}
			}
		} catch (SQLException e) {
			throw new DAOException();
		}finally{
			desconectar();
		}
		return percurso;
	}


	public List<Percurso> getPercursos(int idAcao) throws DAOException{
		ResultSet rs = getResultSet("SELECT * FROM percurso WHERE id_acao = " + idAcao);
		List<Percurso> percursos = new ArrayList<Percurso>();
		Percurso percurso;
		try {
			while(rs.next()){
				percurso = new Percurso();
				percurso.setIdPercurso(rs.getInt("id_percurso"));
				percurso.setIdAcao(rs.getInt("id_acao"));
				percurso.setDescricao(rs.getString("descricao"));
				percursos.add(percurso);
			}
		} catch (SQLException e) {
			throw new DAOException();
		}finally{
			desconectar();
		}
		return percursos;
	}

	@Override
	public Percurso getPorId(int id) throws DAOException {
		ResultSet rs = getResultSet("SELECT * FROM percurso WHERE id_percurso = " + id);
		Percurso percurso = new Percurso();
		try {
			if(rs.next()){
				percurso.setIdPercurso(rs.getInt("id_percurso"));
				percurso.setIdAcao(rs.getInt("id_acao"));
				percurso.setDescricao(rs.getString("descricao"));
			}
		} catch (SQLException e) {
			throw new DAOException();
		}finally{
			desconectar();
		}
		return percurso;
	}

	@Override
	public void removerPorId(int id) throws DAOException {
		execute("DELETE FROM percurso WHERE id_percurso = "+ id);
		
	}

	@Override
	public void remover(Percurso percurso) throws DAOException {
		execute("DELETE FROM percurso WHERE id_percurso = "+ percurso.getIdPercurso());
		
	}

}
